/*
 * Copyright (C) 2001-2016 Food and Agriculture Organization of the
 * United Nations (FAO-UN), United Nations World Food Programme (WFP)
 * and United Nations Environment Programme (UNEP)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at
 * your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
 * Rome - Italy. email: geonetwork@osgeo.org
 */

package org.fao.geonet.domain;

import org.fao.geonet.entitylistener.ThesaurusActivationEntityListenerManager;

import javax.persistence.*;

/**
 * Entity indicating which thesauri are enabled.
 *
 * @author Jesse
 */
@Entity
@Access(AccessType.PROPERTY)
@Table(name = "Thesaurus")
@EntityListeners(ThesaurusActivationEntityListenerManager.class)
public class ThesaurusActivation {
    private String _id;
    private char _activated = Constants.YN_TRUE;

    /**
     * Get the id of the ThesaurusActivation.  This is not autogenerated and is the FName of the
     * thesaurus the activation applies to.
     *
     * @return the id of the ThesaurusActivation
     */
    @Id
    public String getId() {
        return _id;
    }

    /**
     * Set the id of the ThesaurusActivation.  This is not autogenerated and is the FName of the
     * thesaurus the activation applies to.
     *
     * @param id the id of the ThesaurusActivation.  The FName of the thesaurus
     */
    public void setId(String id) {
        this._id = id;
    }

    /**
     * For backwards compatibility we need the activated column to be either 'n' or 'y'. This is a
     * workaround to allow this until future versions of JPA that allow different ways of
     * controlling how types are mapped to the database.
     */
    @Column(name = "activated", nullable = false, length = 1)
    protected char getActivated_JpaWorkaround() {
        return _activated;
    }

    /**
     * Set the column value. Constants.YN_ENABLED for true Constants.YN_DISABLED for false.
     *
     * @param activated the column value. Constants.YN_ENABLED for true Constants.YN_DISABLED for
     *                  false.
     */
    protected void setActivated_JpaWorkaround(char activated) {
        _activated = activated;
    }

    /**
     * Return true if the thesaurus is active.
     *
     * @return true if the thesaurus is active.
     */
    @Transient
    public boolean isActivated() {
        return Constants.toBoolean_fromYNChar(getActivated_JpaWorkaround());
    }

    /**
     * Set true if the thesaurus is active.
     *
     * @param activated true if the thesaurus is active.
     */
    public void setActivated(boolean activated) {
        setActivated_JpaWorkaround(Constants.toYN_EnabledChar(activated));
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ThesaurusActivation that = (ThesaurusActivation) o;

        if (_activated != that._activated) return false;
        if (_id != null ? !_id.equals(that._id) : that._id != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = _id != null ? _id.hashCode() : 0;
        result = 31 * result + (int) _activated;
        return result;
    }
}
